package v1

import (
	"io/ioutil"
	"net/http"

	"../mode"
	"github.com/tungyao/cedar"
)

// 是登录界面
// 如果进入登录接口 要附带上 appid 跳转过来
func PageAuthIndex(w http.ResponseWriter, r *http.Request, co *cedar.Core) {
	if r.URL.Query().Get("appid") == "" {
		co.Json().Error("you must with appid")
		return
	}
	u := CreateUUID(byt(r.Host))
	co.Session.Set("_csrf", u)
	co.View().Assign("CSRF", str(u)).Assign("APPID", r.URL.Query().Get("appid")).Render()
}

// 这个是验证接口
func AuthIndex(w http.ResponseWriter, r *http.Request, co *cedar.Core) {
	// 去redis 或则spruce中 查询看有没有
	// 校验 appid
	token := Random()
	if app := KVDB.Get(byt("app_" + r.FormValue("appid"))).(*App); app != nil {
		data := KVDB.Get(byt("user_" + r.FormValue("user_name"))).(*User)
		if data != nil && data.Pass == r.FormValue("user_pass") { // 校验登录用户
			// 符合则生成code返回到重定向url
			// 存储到缓存中去 5分钟会过期 卧槽还要去数据库你去鉴定
			KVDB.Set(token, mode.AuthInJson{
				Appid:  app.Appid,
				Secret: app.Secret,
				Code:   str(token),
			}, 5*60)
			return
		}
		http.Redirect(w, r, app.Redirect+"?code="+str(token), 302)
	} else {
		co.Json().Error("not found")
		return
	}
	// 验证失败 则返回错误信息
	co.View().Render("auth/err")
}

// 通过code 签发 access token 过去
// code+appid+secret
// json
func AccessAuth(w http.ResponseWriter, r *http.Request, co *cedar.Core) {
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		thownErr(err, w)
		return
	}
	inJson := &mode.AuthInJson{}
	err = inJson.UnmarshalJSON(body)
	if err != nil {
		thownErr(err, w)
		return
	}
	// 现在和缓存中进行对比
}
